import dayjs from 'dayjs';
import { reduce, concat } from 'lodash-es';
import duration from 'dayjs/plugin/duration';

dayjs.extend(duration);
export const rulesPattern = {
  phone: /^1[3-9]\d{9}$/, // 手机号
  telephone: /^0\d{2,3}-\d{7,8}$/, //座机号
  card: /^([1-6][1-9]|50)\d{4}(18|19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/, // 身份证
  email: /^\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]/, // 邮箱格式
  fax: /^0\d{2,3}[+\x22]+\d{7,8}$/, // 传真
  postalCode: /^[0-9][0-9]{5}$/, //邮政编码
  remainder1: /^[0-9]\d*(\.\d{1,1})?$/, // 大于0，且最多保留一位小数
  remainder2: /^[0-9]\d*(\.\d{1,2})?$/, // 大于0，且最多保留两位小数
  remainder3: /^[0-9]{1,7}(\.[0-9]{1,2})?$/, // 大于0，小于9999999.99且最多保留两位小数
  remainder4: /^[A-Z0-9]{1,18}$/, //最长18位大写字母或数字
  remainder5: /^[a-zA-Z0-9]{1,18}$/, //最长18位字母或数字
  remainder6: /^[A-Z0-9]{18}$/, //18位大写字母或数字
  remainder7: /^(((\d|[1-9]\d)(\.\d{1,2})?)|100|100.0|100.00)$/, // 大于0，小于100且最多保留两位小数
  hundred: /^(\d{1,2}(\.\d{1,2})?|100(\.0{1,2})?)$/, // 0-100，且最多保留两位小数
  tenThousand: /^([0-9][0-9]{0,3}|10000)$/, //10000
  pInteger: /^[1-9]\d*$/, // 正整数
  pInteger0: /^(0|[1-9]\d*)$/, // 正整数
  pInteger1: /^[0-9]{18}$/, // 18位数字
  pInteger2: /^[0-9]{0,18}$/, // 最大18位数字
  Chinese: /^[\u4e00-\u9fa5]{0,}$/, //汉字
  Chinese2: /^[\u4e00-\u9fa5]{0,10}$/, //最大十个汉字
  Chinese3: /^[\u4e00-\u9fa5]{0,32}$/, //最大32个汉字
  Chinese4: /^[\u4e00-\u9fa5]{0,20}$/, //最大20个汉字
  character: /^[\u4e00-\u9fa5a-zA-Z0-9]{0,20}$/, //最大20个汉字，字母，数字
  decimal6: /^(?!0(\.0+)?$)\d+(\.\d{1,6})?$/, //最多6位小数
};

// 计算日期差异并返回格式化字符串
export function getDateDiff(startDateString, endDateString) {
  // 创建起始日期和结束日期对象
  const startDate = dayjs(startDateString, 'YYYY-MM-DD');
  const endDate = dayjs(endDateString, 'YYYY-MM-DD');
  // 计算日期差异
  const diff = endDate.diff(startDate);
  // 提取差异的时间单位
  const duration = dayjs.duration(diff);
  const years = duration.years();
  const months = duration.months();
  const days = duration.days();

  // 格式化为字符串
  const formattedDiff = `${years}年${months}月${days}天`;
  return formattedDiff;
}

// 树形结构扁平化
export const treeConvert = tree => {
  return reduce(
    tree,
    (result, item) => {
      const { children, ...rest } = item;
      return concat(result, rest, children && children.length > 0 ? treeConvert(children) : []);
    },
    [],
  );
};

//能源类型
export const energyTypeList = [
  { label: '电能', code: 'ELECTRICITY' },
  { label: '水能', code: 'WATER' },
  { label: '气能', code: 'AIR' },
  { label: '热能', code: 'WARM' },
];
